package br.com.sgpv2.entity.movimentacao;

import java.io.Serializable;
import java.math.BigDecimal;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import br.com.sgpv2.entity.evento.Evento;
import br.com.sgpv2.entity.evento.TipoEventoEnum;
import br.com.sgpv2.util.Util;

@Entity
@Table(name = "vev_valores_evento")
@SequenceGenerator(name = "sequenceValoresEvento", sequenceName = "vev_valores_evento_vev_id_seq")
public class ValoresEvento implements Serializable{
	
	private static final long serialVersionUID = 2157427633748939620L;
	
	private int id;
	private Evento evento;
	private BigDecimal valorDescontoInss;
	private BigDecimal valor;
	private BigDecimal valorDescontoSalarioFamilia;
	private BigDecimal valorDescontoFgts;
	private Movimentacao movimentacao;
	private BigDecimal valorDescontoIrrf;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "vev_id", nullable = false)
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	@ManyToOne
	@JoinColumn(name = "eve_id", nullable = false)
	@LazyCollection(LazyCollectionOption.FALSE)
	public Evento getEvento() {
		return evento;
	}
	public void setEvento(Evento evento) {
		this.evento = evento;
	}	
	
	@Column(name="vev_valor", nullable = true)
	public BigDecimal getValor() {
		return valor;
	}
	public void setValor(BigDecimal valor) {
		this.valor = valor;
	}
	
	@Column(name="vev_valor_desconto_inss")
	public BigDecimal getValorDescontoInss() {
		return valorDescontoInss;
	}
	public void setValorDescontoInss(BigDecimal valorDescontoInss) {
		this.valorDescontoInss = valorDescontoInss;
	}
	
	public BigDecimal getValorDescontoSalarioFamilia() {
		return valorDescontoSalarioFamilia;
	}
	
	@Column(name="vev_valor_desconto_salario_familia")
	public void setValorDescontoSalarioFamilia(
			BigDecimal valorDescontoSalarioFamilia) {
		this.valorDescontoSalarioFamilia = valorDescontoSalarioFamilia;
	}
	
	@ManyToOne
	@JoinColumn(name = "mov_id")
	@LazyCollection(LazyCollectionOption.FALSE)
	public Movimentacao getMovimentacao() {
		return movimentacao;
	}
	public void setMovimentacao(Movimentacao movimentacao) {
		this.movimentacao = movimentacao;
	}
	
	/**
	 * Se o tipo do evento for provento então retorna o valor, caso contrário retorna ZERO.
	 * @return
	 */
	@Transient
	public BigDecimal getValorProvento() {
		if (evento.getTipoEventoEnum().equals(TipoEventoEnum.PROVENTO)) {
			return this.valor;
		} else {
			return BigDecimal.ZERO;
		}
	}
	
	/**
	 * Se o tipo do evento for Desconto então retorna o valor, caso contrário retorna ZERO.
	 * @return
	 */
	@Transient
	public BigDecimal getValorDesconto() {
		if (evento.getTipoEventoEnum().equals(TipoEventoEnum.DESCONTO)) {
			return this.valor;
		} else {
			return BigDecimal.ZERO;
		}
	}
	
	@Column(name="vev_valor_desconto_fgts")
	public BigDecimal getValorDescontoFgts() {
		return valorDescontoFgts;
	}
	public void setValorDescontoFgts(BigDecimal valorDescontoFgts) {
		this.valorDescontoFgts = valorDescontoFgts;
	}
	
	@Column(name="vev_valor_desconto_irrf")
	public BigDecimal getValorDescontoIrrf() {
		return valorDescontoIrrf;
	}
	public void setValorDescontoIrrf(BigDecimal valorDescontoIrrf) {
		this.valorDescontoIrrf = valorDescontoIrrf;
	}
	
	@Transient
	public String getValorFormatado() {
		return Util.obterValorFormatado(valor);
	}

}
